ARAL逆解接口
1. 逆解接口说明
有两种不同功能对应的逆解接口, 它们为:
计算所有逆解: 给定目标位姿, 计算所有可能的关节角; (用在轨迹运动会切换构型时, 用户可以选择初始构型)
计算一个逆解: 给定目标位姿,以及初始关节角或构型需求; 给出一组离初始关节角最近(或指定构型)的解
1.1 计算所有逆解
/**
* @brief 计算给定位姿对应的所有机械臂逆解(在机械臂的运动范围内, 由函数 mdlSetJointRange 设置)
* @param config: 逆解输入信息, 参考 IKConfigInfo 结构体信息
* @param real_ik: 基于理论 (false) / 实际 DH(true) 参数求解
* @param joint_res: 机械臂的逆解集合
* @return 返回值 < 0, 表示计算失败
* > 0, 表示逆解的个数
*/
ARAL_API_COMMON(1.0) int kdInversePosition(const IKConfigInfo& config, const bool real_ik, std::vector<RLJntArray>& joint_res)const = 0;
功能介绍: 该接口通过设置逆解插件实现计算机械臂在设定关节范围内的所有逆解.
如果 real_ik == false
, 实现计算目标位姿, 在设定的关节角范围内的所有理论解析解. 关节角范围通过 IKConfigInfo
设置。
如果 real_ik == ture
, 实现计算目标位姿, 在设定的关节角范围内的所有真实逆解. 该真实逆解通过先计算该位姿下的理论解析解, 再按照真实的运动学参数(考虑DH参数误差)迭代到目标位姿. 迭代最大时长, 和 迭代阈值通过 IKConfigInfo
结构体设置, 位置迭代阈值最低为 1e-6, 姿态迭代阈值最低为 1e-5.
返回值错误值 | 说明 | 建议 |
---|---|---|
E_LOAD_PLUGIN_FAILED | 机械臂在当前位置没有解析逆解,解析逆解求解器未设置 | 设置逆解求解器 |
E_IK_ANALYTICAL_SOLVER_FAILED | 机械臂在当前位置没有解析逆解, 目标点超出工作空间或者奇异 | 无解 |
E_IK_ANALYTICAL_OUT_BOUND | 机械臂在当前位置没有解析逆解, 目标点存在解析解,但该解超过设置的关节范围限制 | 重新设定关节限制 |
E_IK_ITER_NOT_CONVERGENT | 机械臂在当前位置没有逆解, 目标点存在解析解,但计算真实逆解迭代超时 | 无解 |
1.2 计算一个逆解
/**
* @brief 逆运动学,根据末端工具位置计算关节角
* @param config: 逆解输入信息, 参考 IKConfigInfo 结构体信息
* @param real_ik: 基于理论 (false) / 实际 DH(true) 参数求解
* @param joint_res: 逆解结果(关节角)
* @return 返回值 < 0, 表示计算失败
*/
ARAL_API_COMMON(1.0) int kdInversePosition(const IKConfigInfo& config, const bool& real_ik, RLJntArray& joint_res) const = 0;
功能介绍: 该接口实现计算机械臂在设定关节范围内的一个逆解(按照最近关节角选择,或者按照构型选择)
关于机械臂的构型介绍,可以参考文档: 机械臂构型说明
通过 IKConfigInfo
结构体设定逆解输入配置.
如果设定了机械臂的构型, 则按照所选构型选解, 否则按照距离参考关节角最近的解选解
如果设置了迭代精度, 则使能迭代逆解
如果
real_ik == ture
, 计算实际逆解, 使能迭代逆解
返回值错误值 | 说明 | 建议 |
---|---|---|
E_IK_SOLVER_FAILED | 机械臂在当前位置没有解,且没有使能迭代解 | 使能迭代解 |
E_IK_ITER_NOT_CONVERGENT | 机械臂在当前位置没有解,迭代逆解不收敛 | |
E_IK_Q_REF_OUT_BOUND | 机械臂在当前位置没有解,参考关节角超过设置的关节限制 | 重新设置关节限制 |